package Handler;

import Control.Control;
import Control.ControlGestores;
import Modelo.RegistroHorario;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Araya
 */
public class TableTransHandlerAux extends StringTransferHandler2 {

    ControlGestores controlGestores = new ControlGestores();
    private int[] rows = null;
    private int addIndex = -1; //Location where items were added
    private int addCount = 0; //Number of items added.
    private Control control;

    public TableTransHandlerAux(Control pControl) {
        this.control = pControl;
    }

    @Override
    protected void importString(JComponent c, String str) {
        RegistroHorario registro = new RegistroHorario();
        JTable target = (JTable) c;
        String actual = "";
        Object aux = null;
        DefaultTableModel model = (DefaultTableModel) target.getModel();
        int index = target.getSelectedRow();
        if (rows != null && index >= rows[0] - 1
                && index <= rows[rows.length - 1]) {
            rows = null;
            return;
        }
        int max = model.getRowCount();
        if (target.getSelectedRow() < 0) {
            index = max;
        } else {
            if (index > max) {
                index = max;
            }
        }
        aux = model.getValueAt(target.getSelectedRow(), target.getSelectedColumn());
        actual = ((String) (model.getValueAt(target.getSelectedRow(), target.getSelectedColumn())));

        if (entradaNoNula(str) == true) {
            registro = new RegistroHorario(control.obtenerSeccion(), control.getDia(target.getSelectedColumn()),
                    control.getHora(target.getSelectedRow()), control.getAnnio());
            registro = asignar(registro, str);
            if (control.campoDisponibleHorario(aux, actual, str) && (control.asignaEnHorarioAlterno(registro))==false) {
                if (str.split("-").length == 1) {
                    model.setValueAt(ordenaImportString(aux, str, actual), target.getSelectedRow(), target.getSelectedColumn());
                }
                if (str.split("-").length == 2) {
                    model.setValueAt(ordenaImportString(aux, str, actual), target.getSelectedRow(), target.getSelectedColumn());
                }
            }
        } else {
            JOptionPane.showMessageDialog(null, "Dato(s) a copiar invalido(s)", "ERROR", 0);
        }
    }

    public String ordenaImportString(Object objActual, String entrada, String actual) {
        String result = "";
        //SI ES LA PRIMERA VEZ Q SE COPIA UN DATO, Q SE COPIE TAL Y COMO VIENE, SEA AULA O PROFESOR
        if (objActual == null) {
            result = entrada;
        } else {
            //SI ENTRA UN PROFESOR Y YA HAY UNO EN LA CASILLA CON AULA
            if ((entrada.split("-").length == 2) && (actual.split("-").length == 3)) {
                result = entrada + "-" + actual.split("-")[2];
            }
            //SI ENTRA UN PROFESOR Y SOLO HAY AULA EN LA CASILLA
            if ((entrada.split("-").length == 2) && (actual.split("-").length == 1)) {
                result = entrada + "-" + actual;
            }
            //SI ENTRA UN PROFESOR Y LO Q HAY ES UN PROFESOR Y SOLO UN PROFESOR
            if ((entrada.split("-").length == 2) && (actual.split("-").length == 2)) {
                result = entrada;
            }
            //SI ENTRA UN AULA Y LO Q HAY ES UN AULA Y SOLO UN AULA
            if ((entrada.split("-").length == 1) && (actual.split("-").length == 1)) {
                result = entrada;
            }
            //SI ENTRA UN AULA Y LO Q HAY ES UN PROFESOR SOLAMENTE
            if ((entrada.split("-").length == 1) && (actual.split("-").length == 2)) {
                result = actual + "-" + entrada;
            }
            //SI ENTRA UN AULA Y HAY PROFESOR Y AULA
            if ((entrada.split("-").length == 1) && (actual.split("-").length == 3)) {
                result = actual.split("-")[0] + "-" + actual.split("-")[1] + "-" + entrada;
            }
        }
        return result;
    }

    public boolean entradaNoNula(String entrada) {
        boolean result = true;
        if ((entrada.split("-").length == 2) && (entrada.split("-")[0].equals(""))) {
            result = false;
        }
        if ((entrada.split("-").length == 2) && (entrada.split("-")[0].equals("null"))) {
            result = false;
        }
        if ((entrada.split("-").length == 2) && (entrada.split("-")[1] == null) && (entrada.split("-")[0] == null)) {
            result = false;
        }
        return result;
    }

    public String separar(String str) {
        String nombreProfe = "";
        String[] lista;
        String cadena = str;
        lista = cadena.split("-");
        nombreProfe = lista[0];
        return nombreProfe;
    }

    public RegistroHorario asignar(RegistroHorario registro, String str) {
        RegistroHorario result = registro;
        if (str.split("-").length == 1) {
            result.setIdAula(str);
        } else if (str.split("-").length == 2) {
            result.setCedula(control.obtenerProfe(str.split("-")[0]).getCedula());
            result.setNombreMateria(str.split("-")[1]);
        }
        return result;
    }
}
